<?
function getFilename()
{
	DB::query('insert into `filenames` (foo) values (1)');
	$id = DB::getInsertId();
	DB::query('delete from `filenames` where id<'.$id);
	
	// example: 2009sep/12/57/12345_12345
	$str = date('Y').strtolower(date('M')) . '/' . date('d') . '/' . date('i') . '/'. $id.'_'.rand(10000,99999);
	return $str;
}

function getCurrentUser()
{
	if(!isset($_SESSION['current_user'])) return false;
	return $_SESSION['current_user'];
}


function getClassNameById($classid)
{
	global $CONFIG;
	foreach($CONFIG['classid'] as $k=>$v)
	{
		if($v==$classid) return $k;
	}
	return 'document';
}


function ReadContent($fn)
{
    if(!file_exists($fn)) return "";
	$fd = fopen ($fn, "r");
	if(filesize ($fn)>0) $contents = fread ($fd, filesize ($fn));
	else $contents="";
	fclose ($fd);
	return $contents;
}
 
 
function GetSiteTemplate($filename)
{
	global $CONFIG;
	$fn = $CONFIG["root"]."skins/".$CONFIG["skin"]."/".$filename.".tpl";
	return ReadContent($fn);
}


function GetClass(&$obj)
{
	return strtolower(get_class($obj));
}



function Redirect($url)
{
	header("Location: $url");
	exit;
}


function ClearPost()
{
	header("Location: ".$_SERVER['REQUEST_URI']);
	exit;
}

function ClearGet($q)
{
	header("Location: ".$q);
	exit;
}


function ImagePath(&$str,$dir='')
{
	global $CONFIG;
	
	if($dir=='')	$dir= "skins/".$CONFIG["skin"]."/";	
	
	$newpath=$dir."images/";
	$str = str_replace('="images/','="/'.$newpath,$str);
	$str = str_replace('url(images/','url(/'.$newpath,$str);
	$str = str_replace('"style.css','"/'.$dir."css/style.css",$str);
	$str = str_replace('<script type="text/javascript" src="','<script type="text/javascript" src="/'.$dir."script/",$str);
	$str = str_replace('<!#','<#',$str);
	$str = str_replace('!images!','images',$str);
	
	if(strpos($str,'<object') || strpos($str,'<OBJECT'))
	$str.='<script>theObjects = document.getElementsByTagName("object");	for (var i = 0; i < theObjects.length; i++) {theObjects[i].outerHTML = theObjects[i].outerHTML;}</script>';
	
	return $str;
}



function GetPageTitle()
{
		global $pages,$page_names,$CONFIG;
		for($i=0;$i<sizeof($pages);$i++)
		{
			if($pages[$i][0]==$CONFIG["page"]) 
			{
				if($pages[$i][1]=="") return $page_names[$CONFIG["page"]];
				return $pages[$i][1];
			}
		}
}

function GetPageTitleById($pn)
{
		global $pages,$page_names;
		for($i=0;$i<sizeof($pages);$i++)
		{
			if($pages[$i][0]==$pn) 
			{
				if($pages[$i][1]=="") return $page_names[$pn];
				return $pages[$i][1];
			}
		}
}


function GetMaketName()
{
		global $pages,$CONFIG;
		for($i=0;$i<sizeof($pages);$i++)
			if($pages[$i][0]==$CONFIG["page"]) return $pages[$i][2];
		return "";
}
 
 function strtolowerx( $txt){
    return strtr( $txt,"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ", 
					   "абвгдежзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz");
}

function strtoupperx( $txt){
    return strtr( $txt,"абвгдежзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz", 
					   "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
}
 


function StemWord($str)
{
	return preg_match("/^[а-яА-Я]+$/",$str);
}


function Ending($num,$o1,$o2,$o3)
{
	if($num%10==1 && $num%100!=11) return $o1;
	if($num%10>=2 && $num%10<=4 && ($num%100<10 || $num%100>20)) return $o2; 
	return $o3;
}

	function RemoveTags($tex){
		$tex = preg_replace('@<script[^>]*?>.*?</script>@si',' ',$tex);
		$tex = preg_replace('@<[\/\!]*?[^<>]*?>@si',' ',$tex);
		$tex = preg_replace('@<[\/\!]*?[^<>]*?>@',' ',$tex);
		$tex = str_replace('&nbsp;',' ',$tex);
		return $tex;
		}

	function IsLetter($chr)
	{
		if($chr>='a' && $chr<='z') return 1;
		if($chr>='A' && $chr<='Z') return 1;
		if($chr>='а' && $chr<='я') return 1;
		if($chr>='А' && $chr<='Я') return 1;
		if( ($chr>='1' && $chr<='9') || $chr=='0') return 1;
		return 0;
	}
	
	
	function ParseInto($tex,&$words,&$times,&$num)	{
		$num=0;
		$i=0;
		$len=strlen($tex);
		while($i<$len)
		{
			while($i<$len && IsLetter( $tex[$i])==0 ) $i++;
			$newword="";
			while($i<$len && IsLetter( $tex[$i])==1 )
				{
				$newword=$newword.$tex[$i];
				$i++;
				}
			if( strlen($newword)>=3 )Add2Array($newword,$words,$times,$num);
			$i++;
		}
	}
	
	
	function Add2Array($newword,&$words,&$times,&$num){
		$pos=array_search($newword,$words);
		if($pos)
		{
			$times[$pos]+=1;
		}
		else
		{
			$words[$num]=$newword;
			$times[$num]=1;
			$num++;
		}
	}
	
	
	function rus2lat($str)
	{
		$rus = array('ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я','Ъ','Ь','ъ','ь');
		$lat = array('e','zh','c','ch','sh','sh','ju','ja','E','ZH','C','CH','SH','SH','JU','JA','','','','');
		$str = str_replace($rus,$lat,$str);
		$str = strtr($str,
		    "АБВГДЕЗИЙКЛМНОПРСТУФХЫЭабвгдезийклмнопрстуфхыэ",
		    "ABVGDEZIJKLMNOPRSTUFHIEabvgdezijklmnoprstufhie");
 		return($str);
	}
	
	
	function strTrim($str,$n)
	{
		$len = strlen($str);
		if($len <= $n) return $str;
		$i=$n-4;
		while($i < $len){
			if( !IsLetter($str[$i]) ) return substr($str,0,$i);
			$i++;
		}
		return substr($str,0,$n);
	}
	
	
	function array2json($i=array()) {
		$o='';
		foreach ($i as $k=>$v){
			if(is_array($v))
				$o .= '"'.$k.'":'.array2json($v).',';
			else
				$o .= '"'.$k.'":"'.$v.'",';
		}
		return '({'.substr($o,0,-1).'})';
		}
	
	
	function LinkBuilder($params=null,$prepare=false,$page="") {
// создает ссылку с необходимыми параметрами на базе текущего адреса.
// пустые параметры удаляет из ссылки.
// параметр prepare - подготовка УРИ для добавления в конце его параметра.
// если указан параметр page - используется он, а не текущий адрес.
// параметры указываются в url-виде, param1=val1&param2=val2...
	if($page==""){
		$page = substr($_SERVER["REQUEST_URI"],1);
		$page = str_replace("forest/","",$page);
		}
	if($params)	{
		$ps = explode("&", $params);
		if(!is_array($ps)) $ps=Array($ps);
		foreach($ps as $param){
			list($pname,$pval) = explode("=", $param);
			$page = str_replace("&".$pname."=".$_GET[$pname],"",$page);
			$page = str_replace("?".$pname."=".$_GET[$pname],"?",$page);
		}
		if( !is_int( strpos($page,"?") ) ) $page.="?";
		foreach($ps as $param){
			list($pname,$pval) = explode("=", $param);
			if($pval){
				$sep="";
				if( $page[strlen($page)-1]!="&" &&  $page[strlen($page)-1]!="?") $sep="&";
				$page.=$sep.$pname."=".$pval;
				}
			}
		}
	if($prepare){
		if( is_int( strpos($page,"?") ) && $page[strlen($page)-1]!="?" && $page[strlen($page)-1]!="&") $page.="&";
		if( !is_int( strpos($page,"?")) ) $page.="?";
		}
	else{
		if( $page[strlen($page)-1]=="&" ) $page=substr($page,0,strlen($page)-1);
		if( $page[strlen($page)-1]=="?" ) $page=substr($page,0,strlen($page)-1);
		}
	$page=str_replace('?&','?',$page);
	return $page;
}

function getRequestVars($variables = null) {
		if($variables == null) {
			return $_REQUEST;
		}
		
		$list = array();
		foreach($variables as $k => $name) {
			$source_name =  is_numeric($k) ? $name : $k;
			$list[$name] = isset($_REQUEST[$source_name]) ? $_REQUEST[$source_name] : null;
		}
		return $list;
	}
	
	function safe_glob($pattern, $flags=0) {
    $split=explode('/',$pattern);
    $match=array_pop($split);
    $path=implode('/',$split);
    if (($dir=opendir($path))!==false) {
        $glob=array();
        while(($file=readdir($dir))!==false) {
            if (fnmatch($match,$file)) {
                if ((is_dir("$path/$file"))||(!($flags&GLOB_ONLYDIR))) {
                    if ($flags&GLOB_MARK) $file.='/';
                    $glob[]=$path.'/'.$file;
                }
            }
        }
        closedir($dir);
        if (!($flags&GLOB_NOSORT)) sort($glob);
        return $glob;
    } else {
        return false;
    }   
}

if (!function_exists('fnmatch')) {
    function fnmatch($pattern, $string) {
        return @preg_match('/^' . strtr(addcslashes($pattern, '\\.+^$(){}=!<>|'), array('*' => '.*', '?' => '.?')) . '$/i', $string);
    }
}








$monthes_array = array(
	'1'=>'Январь',
	'2'=>'Февраль',
	'3'=>'Март',
	'4'=>'Апрель',
	'5'=>'Май',
	'6'=>'Июнь',
	'7'=>'Июль',
	'8'=>'Август',
	'9'=>'Сентябрь',
	'10'=>'Октябрь',
	'11'=>'Ноябрь',
	'12'=>'Декабрь',
);

$monthes_array2 = array(
	'1'=>'января',
	'2'=>'февраля',
	'3'=>'марта',
	'4'=>'апреля',
	'5'=>'мая',
	'6'=>'июня',
	'7'=>'июля',
	'8'=>'августа',
	'9'=>'сентября',
	'10'=>'октября',
	'11'=>'ноября',
	'12'=>'декабря',
);

$weekday_array = array(
	'1'=>'понедельник',
	'2'=>'вторник',
	'3'=>'среда',
	'4'=>'четверг',
	'5'=>'пятница',
	'6'=>'суббота',
	'7'=>'воскресенье'
);

function getMonthes()
{
	global $monthes_array;
	return $monthes_array;
}

function getMonthName($month)
{
	global $monthes_array;
	return $monthes_array[''.$month];
}
function getMonthName2($month)
{
	global $monthes_array2;
	return $monthes_array2[''.$month];
}